home *** CD-ROM | disk | FTP | other *** search
- UNIT Bits;
- (**) INTERFACE (**)
- TYPE
- bbit = 0..7;
- wbit = 0..15;
- lbit = 0..31;
-
- PROCEDURE SetBitB(VAR B : Byte; bit : bbit);
- PROCEDURE ClearBitB(VAR B : Byte; bit : bbit);
- PROCEDURE ToggleBitB(VAR B : Byte; bit : bbit);
- FUNCTION BitSetB(B : Byte; bit : bbit) : Boolean;
- FUNCTION BitClearB(B : Byte; bit : bbit) : Boolean;
-
- PROCEDURE SetBitW(VAR W : Word; bit : wbit);
- PROCEDURE ClearBitW(VAR W : Word; bit : wbit);
- PROCEDURE ToggleBitW(VAR W : Word; bit : wbit);
- FUNCTION BitSetW(W : Word; bit : wbit) : Boolean;
- FUNCTION BitClearW(W : Word; bit : wbit) : Boolean;
-
- PROCEDURE SetBitL(VAR L : LongInt; bit : lbit);
- PROCEDURE ClearBitL(VAR L : LongInt; bit : lbit);
- PROCEDURE ToggleBitL(VAR L : LongInt; bit : lbit);
- FUNCTION BitSetL(L : LongInt; bit : lbit) : Boolean;
- FUNCTION BitClearL(L : LongInt; bit : lbit) : Boolean;
-
- (**) IMPLEMENTATION (**)
- PROCEDURE SetBitB(VAR B : Byte; bit : bbit);
- Assembler;
- ASM
- MOV CL, bit
- MOV BL, 1
- SHL BL, CL {BL contains 2-to-the-bit}
- LES DI, B
- OR ES:[DI], BL {OR turns on bit}
- END;
-
- PROCEDURE ClearBitB(VAR B : Byte; bit : bbit);
- Assembler;
- ASM
- MOV CL, bit
- MOV BL, 1
- SHL BL, CL {BL contains 2-to-the-bit}
- NOT BL
- LES DI, B
- AND ES:[DI], BL {AND of NOT BL turns off bit}
- END;
-
- PROCEDURE ToggleBitB(VAR B : Byte; bit : bbit);
- Assembler;
- ASM
- MOV CL, bit
- MOV BL, 1
- SHL BL, CL {BL contains 2-to-the-bit}
- LES DI, B
- XOR ES:[DI], BL {XOR toggles bit}
- END;
-
- FUNCTION BitSetB(B : Byte; bit : bbit) : Boolean;
- Assembler;
- ASM
- MOV CL, bit
- MOV BL, 1
- SHL BL, CL {BL contains 2-to-the-bit}
- MOV AL, 0 {set result to FALSE}
- TEST B, BL
- JZ @No
- INC AL {set result to TRUE}
- @No:
- END;
-
- FUNCTION BitClearB(B : Byte; bit : bbit) : Boolean;
- Assembler;
- ASM
- MOV CL, bit
- MOV BL, 1
- SHL BL, CL {BL contains 2-to-the-bit}
- MOV AL, 0 {set result to FALSE}
- TEST B, BL
- JNZ @No
- INC AL {set result to TRUE}
- @No:
- END;
-
- PROCEDURE SetBitW(VAR W : Word; bit : wbit);
- Assembler;
- ASM
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- LES DI, W
- OR ES:[DI], BX {OR turns on bit}
- END;
-
- PROCEDURE ClearBitW(VAR W : Word; bit : wbit);
- Assembler;
- ASM
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- NOT BX
- LES DI, W
- AND ES:[DI], BX {AND of NOT BX turns off bit}
- END;
-
- PROCEDURE ToggleBitW(VAR W : Word; bit : wbit);
- Assembler;
- ASM
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- LES DI, W
- XOR ES:[DI], BX {XOR toggles bit}
- END;
-
- FUNCTION BitSetW(W : Word; bit : wbit) : Boolean;
- Assembler;
- ASM
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- MOV AL, 0 {set result to FALSE}
- TEST W, BX
- JZ @No
- INC AL {set result to TRUE}
- @No:
- END;
-
- FUNCTION BitClearW(W : Word; bit : wbit) : Boolean;
- Assembler;
- ASM
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- MOV AL, 0 {set result to FALSE}
- TEST W, BX
- JNZ @No
- INC AL {set result to TRUE}
- @No:
- END;
-
- PROCEDURE SetBitL(VAR L : LongInt; bit : lbit);
- Assembler;
- ASM
- LES DI, L
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- JZ @TopWord {if zero, use high word}
- OR ES:[DI], BX {OR turns on bit}
- JMP @Finish
- @TopWord:
- SUB CL, 16
- MOV BX, 1
- SHL BX, CL
- OR ES:[DI+2], BX
- @Finish:
- END;
-
- PROCEDURE ClearBitL(VAR L : LongInt; bit : lbit);
- Assembler;
- ASM
- LES DI, L
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- JZ @TopWord {if zero, use high word}
- NOT BX
- AND ES:[DI], BX {AND of NOT BX turns off bit}
- JMP @Finish
- @TopWord:
- SUB CL, 16
- MOV BX, 1
- SHL BX, CL
- NOT BX
- AND ES:[DI+2], BX
- @Finish:
- END;
-
- PROCEDURE ToggleBitL(VAR L : LongInt; bit : lbit);
- Assembler;
- ASM
- LES DI, L
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- JZ @TopWord {if zero, use high word}
- XOR ES:[DI], BX {XOR toggles bit}
- JMP @Finish
- @TopWord:
- SUB CL, 16
- MOV BX, 1
- SHL BX, CL
- XOR ES:[DI+2], BX
- @Finish:
- END;
-
- FUNCTION BitSetL(L : LongInt; bit : lbit) : Boolean;
- Assembler;
- ASM
- MOV AL, 0 {set result to FALSE}
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- JZ @TopWord {if zero, use high word}
- TEST Word(L), BX
- JMP @Finish
- @TopWord:
- SUB CL, 16
- MOV BX, 1
- SHL BX, CL
- TEST Word(L+2), BX
- @Finish:
- JZ @No
- INC AL {set result to TRUE}
- @No:
- END;
-
- FUNCTION BitClearL(L : LongInt; bit : lbit) : Boolean;
- Assembler;
- ASM
- MOV AL, 0 {set result to FALSE}
- MOV CL, bit
- MOV BX, 1
- SHL BX, CL {BX contains 2-to-the-bit}
- JZ @TopWord {if zero, use high word}
- TEST Word(L), BX
- JMP @Finish
- @TopWord:
- SUB CL, 16
- MOV BX, 1
- SHL BX, CL
- TEST Word(L+2), BX
- @Finish:
- JNZ @No
- INC AL {set result to TRUE}
- @No:
- END;
- END.